// custom-scan.js - iOS风格版本
Page({
  data: {
    showCamera: false,
    devicePosition: 'back',
    flash: 'off',
    useCustomScan: true,
    loading: false,
    loadingText: '处理中...',
    showResult: false,
    scanResult: '',
    // 按钮按下状态
    testPressed: false,
    customSwitchPressed: false,
    wechatSwitchPressed: false,
    takePhotoPressed: false,
    flashPressed: false,
    switchCameraPressed: false,
    albumPressed: false,
    backPressed: false,
    closePressed: false,
    copyPressed: false,
    handlePressed: false
  },

  onLoad: function (options) {
    console.log('扫码页面加载');
    
    // 设置页面标题和样式
    wx.setNavigationBarTitle({
      title: '扫一扫'
    });
    wx.setNavigationBarColor({
      frontColor: '#ffffff',
      backgroundColor: '#000000'
    });
    
    // 延迟一点启动摄像头，确保页面完全加载
    setTimeout(() => {
      this.initCamera();
    }, 500);
  },

  onShow: function () {
    console.log('扫码页面显示 - 当前摄像头状态:', this.data.showCamera);
    
    // 重置页面状态
    this.setData({
      loading: false,
      showResult: false,
      useCustomScan: true
    });
    
    // 当页面重新显示时，检查摄像头状态
    // 如果摄像头没有显示，重新初始化
    if (!this.data.showCamera) {
      console.log('摄像头未显示，重新初始化');
      setTimeout(() => {
        this.initCamera();
      }, 300);
    } else {
      console.log('摄像头已显示，状态正常');
    }
  },

  onHide: function () {
    console.log('扫码页面隐藏');
    
    // 隐藏加载状态和结果弹窗
    this.setData({
      loading: false,
      showResult: false
    });
  },

  onUnload: function () {
    console.log('扫码页面卸载');
  },

  // 测试按钮 - 验证点击功能（虽然界面隐藏但功能保留）
  testButton: function () {
    console.log('✅ 按钮功能正常 - 摄像头状态:', this.data.showCamera);
    
    // iOS风格提示
    wx.showToast({
      title: '功能测试正常',
      icon: 'success',
      duration: 1500
    });
  },

  // 初始化摄像头
  initCamera: function () {
    console.log('初始化摄像头');
    
    // 检查权限
    wx.getSetting({
      success: (res) => {
        if (res.authSetting['scope.camera'] === false) {
          // 用户拒绝过摄像头权限
          wx.showModal({
            title: '需要摄像头权限',
            content: '请在设置中开启摄像头权限来使用扫码功能',
            confirmText: '去设置',
            cancelText: '返回',
            success: (modalRes) => {
              if (modalRes.confirm) {
                wx.openSetting();
              } else {
                this.goBack();
              }
            }
          });
        } else if (res.authSetting['scope.camera'] === undefined) {
          // 还没有请求过权限
          wx.authorize({
            scope: 'scope.camera',
            success: () => {
              this.setData({
                showCamera: true
              });
              console.log('摄像头启动成功');
            },
            fail: () => {
              wx.showToast({
                title: '需要摄像头权限才能扫码',
                icon: 'none',
                duration: 2000
              });
              this.goBack();
            }
          });
        } else {
          // 启动摄像头
          this.setData({
            showCamera: true
          });
          console.log('摄像头启动成功');
        }
      },
      fail: (err) => {
        console.error('获取设置失败:', err);
        wx.showToast({
          title: '权限检查失败',
          icon: 'none'
        });
      }
    });
  },

  // 切换到自定义扫码
  switchToCustom: function () {
    console.log('切换到自定义扫码');
    if (!this.data.useCustomScan) {
      this.setData({
        useCustomScan: true
      });
      wx.showToast({
        title: '已切换到自定义扫码',
        icon: 'none'
      });
    }
  },

  // 切换到微信API扫码
  switchToWechat: function () {
    console.log('切换到微信API扫码');
    if (this.data.useCustomScan) {
      this.setData({
        useCustomScan: false
      });
      // 直接调用微信API
      this.callWechatScanAPI();
    }
  },

  // 调用微信扫码API
  callWechatScanAPI: function () {
    console.log('调用微信扫码API');
    wx.scanCode({
      onlyFromCamera: false, // 支持摄像头拍照和从相册选择
      scanType: ['qrCode', 'barCode', 'datamatrix', 'pdf417'],
      success: (res) => {
        console.log('微信API扫码成功:', res);
        this.handleScanSuccess(res.result);
      },
      fail: (err) => {
        console.error('微信API扫码失败:', err);
        
        // 无论什么原因失败，都要恢复到自定义扫码模式
        this.setData({
          useCustomScan: true
        });
        
        if (err.errMsg && err.errMsg.includes('cancel')) {
          console.log('用户取消微信扫码，返回自定义模式');
        } else {
          wx.showModal({
            title: '扫码失败',
            content: '识别失败，请确保图片清晰且包含可识别的二维码或条形码。\n\n提示：可以选择拍照或从相册选择图片进行识别。',
            confirmText: '知道了',
            showCancel: false
          });
        }
        
        // 确保摄像头状态正确
        if (!this.data.showCamera) {
          setTimeout(() => {
            this.initCamera();
          }, 300);
        }
      }
    });
  },

  // 拍照扫码
  takePhotoToScan: function () {
    console.log('开始拍照识别');
    
    if (!this.data.showCamera) {
      wx.showToast({
        title: '摄像头未就绪，请稍候',
        icon: 'none'
      });
      return;
    }

    if (!this.data.useCustomScan) {
      // 如果不是自定义模式，调用微信API
      this.callWechatScanAPI();
      return;
    }

    // 显示加载状态
    this.setData({
      loading: true,
      loadingText: '正在识别...'
    });

    // 创建摄像头上下文
    const ctx = wx.createCameraContext();
    
    ctx.takePhoto({
      quality: 'high',
      success: (res) => {
        console.log('拍照成功，开始识别');
        this.recognizeQRCode(res.tempImagePath);
      },
      fail: (err) => {
        console.error('拍照失败:', err);
        this.setData({
          loading: false
        });
        
        wx.showToast({
          title: '拍照失败，请重试',
          icon: 'none'
        });
      }
    });
  },

  // 识别二维码
  recognizeQRCode: function (imagePath) {
    // 这里使用模拟识别，实际项目中需要接入真实的识别服务
    
    this.setData({
      loadingText: '识别中...'
    });
    
    // 模拟识别过程
    setTimeout(() => {
      // 模拟识别结果
      const mockResults = [
        'https://www.apple.com',
        'https://developer.apple.com',
        '这是一个测试二维码内容 - iOS风格界面',
        'WIFI:T:WPA;S:iPhone的WiFi;P:password123;H:;',
        'tel:10086',
        'mailto:example@icloud.com',
        null // 表示未识别到
      ];
      
      const randomResult = mockResults[Math.floor(Math.random() * mockResults.length)];
      
      if (randomResult) {
        // 识别成功
        console.log('识别成功:', randomResult);
        this.handleScanSuccess(randomResult);
      } else {
        // 未识别到内容
        this.setData({
          loading: false
        });
        wx.showToast({
          title: '未识别到二维码，请重试',
          icon: 'none'
        });
      }
      
    }, 1200); // 稍微缩短识别时间
  },

  // 处理扫码成功
  handleScanSuccess: function (result) {
    console.log('扫码成功:', result);
    
    // 保存扫码记录
    this.saveScanRecord(result);
    
    this.setData({
      loading: false,
      showResult: true,
      scanResult: result
    });
  },

  // 保存扫码记录
  saveScanRecord: function(content) {
    const historyManager = require('../../utils/history-manager.js');
    const success = historyManager.saveScanRecord(content);
    
    if (success) {
      console.log('扫码记录已保存');
    }
  },

  // 切换闪光灯
  toggleFlash: function () {
    console.log('切换闪光灯');
    
    const newFlash = this.data.flash === 'torch' ? 'off' : 'torch';
    this.setData({
      flash: newFlash
    });
    
    wx.showToast({
      title: newFlash === 'torch' ? '闪光灯已开启' : '闪光灯已关闭',
      icon: 'none',
      duration: 1500
    });
  },

  // 切换摄像头
  switchCamera: function () {
    console.log('切换摄像头');
    const newPosition = this.data.devicePosition === 'back' ? 'front' : 'back';
    this.setData({
      devicePosition: newPosition
    });
    
    wx.showToast({
      title: `已切换到${newPosition === 'back' ? '后置' : '前置'}摄像头`,
      icon: 'none',
      duration: 1500
    });
  },

  // 从相册选择图片识别
  chooseFromAlbum: function () {
    console.log('从相册选择图片');
    wx.chooseImage({
      count: 1,
      sizeType: ['original'],
      sourceType: ['album'],
      success: (res) => {
        const imagePath = res.tempFilePaths[0];
        this.setData({
          loading: true,
          loadingText: '正在识别相册图片...'
        });
        this.recognizeQRCode(imagePath);
      },
      fail: (err) => {
        console.error('选择图片失败:', err);
      }
    });
  },

  // 返回按钮
  goBack: function () {
    console.log('返回上级页面');
    wx.navigateBack();
  },

  // 隐藏结果弹窗
  hideResult: function () {
    console.log('关闭结果弹窗');
    this.setData({
      showResult: false,
      scanResult: ''
    });
  },

  // 复制结果
  copyResult: function () {
    wx.setClipboardData({
      data: this.data.scanResult,
      success: () => {
        wx.showToast({
          title: '已复制到剪贴板',
          icon: 'success'
        });
      }
    });
  },

  // 处理结果（返回首页处理）
  handleResult: function () {
    const result = this.data.scanResult;
    
    // 隐藏结果弹窗
    this.hideResult();
    
    // 返回到首页并处理结果
    wx.navigateBack({
      success: () => {
        // 获取首页实例并调用处理方法
        const pages = getCurrentPages();
        if (pages.length > 1) {
          const prevPage = pages[pages.length - 2];
          if (prevPage.handleScanResult) {
            // 直接传递字符串，与首页的handleScanResult方法兼容
            prevPage.handleScanResult(result);
          }
        }
      }
    });
  },

  // 停止事件冒泡
  stopPropagation: function () {
    // 阻止事件冒泡
  },

  // 摄像头准备就绪
  onCameraReady: function (e) {
    console.log('摄像头已准备就绪');
  },

  // 摄像头错误
  onCameraError: function (e) {
    console.error('摄像头错误:', e.detail);
    
    let errorMsg = '摄像头启动失败';
    if (e.detail.errMsg) {
      if (e.detail.errMsg.includes('user deny')) {
        errorMsg = '用户拒绝了摄像头权限';
      } else if (e.detail.errMsg.includes('not available')) {
        errorMsg = '摄像头设备不可用';
      } else {
        errorMsg = '摄像头出现错误: ' + e.detail.errMsg;
      }
    }
    
    wx.showModal({
      title: '摄像头错误',
      content: errorMsg,
      showCancel: false,
      confirmText: '返回',
      success: () => {
        this.goBack();
      }
    });
  },

  // 摄像头停止
  onCameraStop: function (e) {
    console.log('摄像头已停止');
    this.setData({
      showCamera: false
    });
  },

  // 测试按钮触摸事件
  onTestTouchStart: function() {
    this.setData({ testPressed: true });
  },
  onTestTouchEnd: function() {
    this.setData({ testPressed: false });
  },

  // 自定义切换按钮触摸事件
  onCustomSwitchTouchStart: function() {
    this.setData({ customSwitchPressed: true });
  },
  onCustomSwitchTouchEnd: function() {
    this.setData({ customSwitchPressed: false });
  },

  // 微信切换按钮触摸事件
  onWechatSwitchTouchStart: function() {
    this.setData({ wechatSwitchPressed: true });
  },
  onWechatSwitchTouchEnd: function() {
    this.setData({ wechatSwitchPressed: false });
  },

  // 拍照按钮触摸事件
  onTakePhotoTouchStart: function() {
    this.setData({ takePhotoPressed: true });
  },
  onTakePhotoTouchEnd: function() {
    this.setData({ takePhotoPressed: false });
  },

  // 闪光灯按钮触摸事件
  onFlashTouchStart: function() {
    this.setData({ flashPressed: true });
  },
  onFlashTouchEnd: function() {
    this.setData({ flashPressed: false });
  },

  // 切换摄像头按钮触摸事件
  onSwitchCameraTouchStart: function() {
    this.setData({ switchCameraPressed: true });
  },
  onSwitchCameraTouchEnd: function() {
    this.setData({ switchCameraPressed: false });
  },

  // 相册按钮触摸事件
  onAlbumTouchStart: function() {
    this.setData({ albumPressed: true });
  },
  onAlbumTouchEnd: function() {
    this.setData({ albumPressed: false });
  },

  // 返回按钮触摸事件
  onBackTouchStart: function() {
    this.setData({ backPressed: true });
  },
  onBackTouchEnd: function() {
    this.setData({ backPressed: false });
  },

  // 关闭按钮触摸事件
  onCloseTouchStart: function() {
    this.setData({ closePressed: true });
  },
  onCloseTouchEnd: function() {
    this.setData({ closePressed: false });
  },

  // 复制按钮触摸事件
  onCopyTouchStart: function() {
    this.setData({ copyPressed: true });
  },
  onCopyTouchEnd: function() {
    this.setData({ copyPressed: false });
  },

  // 处理按钮触摸事件
  onHandleTouchStart: function() {
    this.setData({ handlePressed: true });
  },
  onHandleTouchEnd: function() {
    this.setData({ handlePressed: false });
  },
}); 